package com.babasport.service.base;

import java.util.HashMap;
import java.util.LinkedHashMap;

import com.babasport.bean.QueryResult;

/**
 * 所有业务bean共有的操作
 * 
 * @author Administrator
 * 
 */
public interface DAO {

	/**
	 * 保存实体
	 * 
	 * @param entity
	 *            实体ID
	 */
	public void save(Object entity);

	/**
	 * 更新实体
	 * 
	 * @param entity
	 *            实体
	 */
	public void update(Object entity);

	/**
	 * 删除一个实体
	 * 
	 * @param entityID
	 *            实体ID
	 */
	public <T> void delete(Class<T> entityClass, Object entityID);

	/**
	 * 删除一组实体
	 * 
	 * @param entityIDs
	 *            实体ID
	 */
	public <T> void delete(Class<T> entityClass, Object[] entityIDs);

	
	/**
	 * 获取实体
	 * 
	 * @param <T>
	 *            注意这运用了泛型
	 * @param entityClass
	 *            实体类
	 * @param entityID
	 *            实体ID
	 * @return
	 */
	public <T> T query(Class<T> entityClass, Object entityID);

	
	/**
	 * 查询所有
	 * 
	 * @param <T>
	 * @param entityClass
	 *            实体类
	 * @param firstIndex
	 *            开始索引
	 * @param maxIndex
	 *            获取的记录数
	 * @param orderBy
	 *            排序关键字
	 * @return
	 */
	public <T> QueryResult<T> getScrollData(Class<T> entityClass);
	
	
	/**
	 * 分页查询  (不带过滤,不排序)
	 * 
	 * @param <T>
	 * @param entityClass
	 *            实体类
	 * @param firstIndex
	 *            开始索引
	 * @param maxIndex
	 *            获取的记录数
	 * @param orderBy
	 *            排序关键字
	 * @return
	 */
	public <T> QueryResult<T> getScrollData(Class<T> entityClass,
			int firstIndex, int maxIndex);
	
	
	/**
	 * 分页查询(仅过滤)
	 * 
	 * @param <T>
	 * @param entityClass
	 *            实体类
	 * @param firstIndex
	 *            开始索引
	 * @param maxIndex
	 *            获取的记录数
	 * @param orderBy
	 *            排序关键字
	 * @return
	 */
	public <T> QueryResult<T> getScrollData(Class<T> entityClass,
			int firstIndex, int maxIndex, HashMap<String, Object> where);
	
	/**
	 * 分页查询(仅排序)
	 * 
	 * @param <T>
	 * @param entityClass
	 *            实体类
	 * @param firstIndex
	 *            开始索引
	 * @param maxIndex
	 *            获取的记录数
	 * @param orderBy
	 *            排序关键字
	 * @return
	 */
	public <T> QueryResult<T> getScrollData(Class<T> entityClass,
			int firstIndex, int maxIndex,
			LinkedHashMap<String, String> orderBy);
	
	/**
	 * 分页查询(带过滤,排序)
	 * 
	 * @param <T>
	 * @param entityClass
	 *            实体类
	 * @param firstIndex
	 *            开始索引
	 * @param maxIndex
	 *            获取的记录数
	 * @param orderBy
	 *            排序关键字
	 * @return
	 */
	public <T> QueryResult<T> getScrollData(Class<T> entityClass,
			int firstIndex, int maxIndex, HashMap<String, Object> where,
			LinkedHashMap<String, String> orderBy);
	
	
}
